package com.tn.dao.vehicle;

import com.tn.controller.alarm.common.model.vehicle.entity.VehicleInfoDO;
import com.tn.controller.alarm.common.model.vehicle.vo.AlarmInputParam;
import com.tn.controller.alarm.common.model.vehicle.vo.VehicleTaskInfoVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 装载车Dao
 *
 * @program: tn_aucy_java
 * @author: yangjiayao
 * @create: 2022/03/01
 */
@Repository
public interface IVehicleDao {
    /**
     * 根据车牌查询装载车信息
     *
     * @param license 车牌
     * @return 装载车信息
     */
    VehicleInfoDO queryVehicleInfoByLicense(@Param("license") String license);

    /**
     * 根据司机查询装载车
     *
     * @param driver 司机
     * @return 装载车信息
     */
    VehicleInfoDO queryVehicleByDriver(@Param("driver") String driver);

    /**
     * 查询空闲的装载车
     *
     * @return 装载车信息
     */
    List<VehicleInfoDO> queryInactiveVehicle();

    /**
     * 绑定司机和装载车
     *
     * @param vehicleId 装载车ID
     * @param driver    司机
     * @return 绑定结果
     */
    int bindingDriver(@Param("vehicleId") int vehicleId, @Param("driver") String driver);

    /**
     * 司机是否正在工作
     *
     * @param driver 司机
     * @return 是否在工作
     */
    int isWorkingDriver(@Param("driver") String driver);

    /**
     * 司机和装载车解除绑定
     *
     * @param driver 司机
     * @return 解绑结果
     */
    int unboundDriver(@Param("driver") String driver);

    /**
     * 查询装载车理货任务信息
     *
     * @param vehicleId 装载车ID
     * @return 装载车理货信息
     */
    List<VehicleTaskInfoVO> queryTallyTaskInfoByVehicle(@Param("vehicleId") int vehicleId);

    /**
     * 查询装载车理货任务信息
     *
     * @param id ID
     * @return 装载车理货信息
     */
    String queryTruckTagByTallyId(@Param("id") int id);

    /**
     * 更新理货任务状态
     *
     * @param tagId  标签
     * @param status 状态
     * @return 更新结果
     */
    int updateTallyStatusByTag(@Param("tagId") String tagId, @Param("status") int status, @Param("time") String time);

    /**
     * 是否工作中
     *
     * @param vehicleId vehicleId
     * @return 是否工作中
     */
    int isWorking(@Param("vehicleId") int vehicleId);

    /**
     * 更新理货任务状态
     *
     * @param id     理货任务ID
     * @param status 状态
     * @return 更新结果
     */
    int updateTallyStatus(@Param("id") int id, @Param("status") int status, @Param("time") String time);

    /**
     * 查询装载车理货任务信息
     *
     * @param id ID
     * @return 装载车信息
     */
    VehicleTaskInfoVO queryTallyTaskInfoById(@Param("id") int id);

    /**
     * 查询告警任务入参
     *
     * @param taskId 理货任务ID
     * @return 告警入参
     */
    AlarmInputParam queryAlarmParamById(@Param("taskId") int taskId);

    /**
     * 查询告警所需信息
     *
     * @param tagId 标签ID
     * @return 告警所需信息
     */
    AlarmInputParam queryAlarmParamByTag(@Param("tagId") String tagId);

    /**
     * 更新告警ID
     *
     * @param taskId 理货任务ID
     * @return 更新结果
     */
    int updateAlarmTaskId(@Param("taskId") int taskId, @Param("alarmTaskId") int alarmTaskId);

    /**
     * 是否工作中
     *
     * @param id ID
     * @return 是否工作中
     */
    int isCalled(@Param("id") int id);

    /**
     * 将理货任务表数据拷贝到理货日志表
     *
     * @param id 理货任务ID
     * @return 拷贝的条目数
     */
    int copyTallyTaskToLog(@Param("id") int id);

    /**
     * 删除理货任务
     *
     * @param id 理货任务ID
     * @return 删除的条目数
     */
    int deleteTallyTask(@Param("id") int id);

    /**
     * 查询装载车历史理货任务总数
     *
     * @param vehicleId 装载车ID
     * @return 总数
     */
    int queryHisTallyTaskCount(@Param("vehicleId") int vehicleId);

    /**
     * 分页查询装载车历史理货任务
     *
     * @param startIndex 开始索引
     * @param pageSize   页长
     * @param vehicleId  装载车ID
     * @return 装载车历史理货任务
     */
    List<VehicleTaskInfoVO> queryHisTallyTaskByPage(@Param("startIndex") int startIndex,
                                                    @Param("pageSize") int pageSize, @Param("vehicleId") int vehicleId);

    /**
     * 查询装载车当日已完成任务量
     *
     * @param vehicleId 装载车ID
     * @return 任务量
     */
    double queryDailyDoneTaskByVehicle(@Param("vehicleId") int vehicleId, @Param("date") String date);

    /**
     * 查询装载车当日未完成任务量
     *
     * @param vehicleId 装载车ID
     * @return 任务量
     */
    double queryDailyUndoTaskByVehicle(@Param("vehicleId") int vehicleId, @Param("date") String date);

    /**
     * 查询装载车的距离检测任务是否已创建
     *
     * @param vehicleId 装载车ID
     * @return 任务创建情况
     */
    Integer queryVehicleDisTaskStatus(@Param("vehicleId") int vehicleId);

    /**
     * 更新装载车距离检测任务状态
     *
     * @param vehicleId 装载车ID
     * @return 更新结果
     */
    int updateDisTaskStatus(@Param("vehicleId") int vehicleId, @Param("status") int status);
}
